package main

import (
	"encoding/json"
	"io"
	"os"
)

func main() {
	if err := strip(os.Stdin, os.Stdout); err != nil {
		os.Stderr.WriteString("nbstrip: " + err.Error() + "\n")
		os.Exit(1)
	}
}

func strip(r io.Reader, w io.Writer) error {
	var root map[string]interface{}
	if err := json.NewDecoder(r).Decode(&root); err != nil {
		return err
	}

	cells, ok := root["cells"].([]interface{})
	if !ok {
		return nil // 没有 cells 字段直接返回
	}

	for _, c := range cells {
		cell, ok := c.(map[string]interface{})
		if !ok {
			continue
		}
		if cell["cell_type"] != "code" {
			continue
		}
		// 只清这两个字段
		cell["outputs"] = []interface{}{}
		cell["execution_count"] = nil
	}

	enc := json.NewEncoder(w)
	enc.SetIndent("", " ")
	return enc.Encode(&root)
}

/* 编译
go build -ldflags="-s -w" -trimpath -o nbstrip.exe nbstrip.go

全局添加 git 过滤规则
git config --global filter.nbstrip.clean nbstrip

在仓库根目录创建/编辑 `.gitattributes`, 添加

*.ipynb filter=nbstrip

git add 的时候会自动应用
*/
